iT邦幫忙

0

Python 序列化Serialization and 反序列化Deserialization

  • 分享至 

  • xImage
  •  

在程式設計中,**序列化(Serialization)和反序列化(Deserialization)**是兩個常見的概念,主要與資料的轉換和儲存有關。
簡單來說,這兩個過程是資料在不同形式之間轉換的過程。

1. 序列化 (Serialization)

序列化是將資料結構或物件狀態轉換為可以儲存或傳輸的格式,通常是二進制或字串格式。
這個過程使得物件可以被儲存在檔案中、傳輸到網路上、或儲存在資料庫中,
且能夠在未來再進行反序列化(還原)以恢復成原來的物件。

簡單的例子:
假設你有一個 Python 字典 {"name": "Alice", "age": 30},你想將它寫入文件中,
或者將它發送到網路上,你需要將它「序列化」成某種格式(如 JSON 或 Pickle 格式)。
在這種情況下,序列化就是將 Python 物件轉換為字串或二進制格式,以便進行儲存或傳輸。
在 Python 中,常用的序列化格式包括:

  • JSON(JavaScript Object Notation):通常用於資料交換,尤其在 Web 開發中。
  • Pickle:Python 自有的序列化格式,適用於 Python 物件的儲存和重建。

2. 反序列化 (Deserialization)

反序列化是序列化的反向過程,將儲存或傳輸過來的資料恢復為原來的物件或資料結構。也就是說,將二進制或字串格式的資料轉換回程式可以處理的物件。

簡單的例子:
假設你有一個序列化後的資料(例如 JSON 格式的字串)'{"name": "Alice", "age": 30}',你想將它轉換回 Python 字典物件,這時候就需要進行反序列化。
在 Python 中,常用的反序列化方式包括:

  • JSON 反序列化(json.loads())
  • Pickle 反序列化(pickle.load())
  • 序列化與反序列化的應用範例
  • JSON 格式的序列化與反序列化:
import json

# 物件
person = {"name": "Alice", "age": 30}

# 序列化: 將 Python 字典轉換為 JSON 格式的字串
json_data = json.dumps(person)
print("Serialized data:", json_data)

# 反序列化: 將 JSON 格式的字串轉換回 Python 字典
person_object = json.loads(json_data)
print("Deserialized data:", person_object)

在這個例子中:

  • json.dumps():將 Python 字典轉換為 JSON 格式的字串,這就是序列化。
  • json.loads():將 JSON 格式的字串轉換回 Python 字典,這就是反序列化。
    Pickle 格式的序列化與反序列化:
import pickle

# 物件
person = {"name": "Alice", "age": 30}

# 序列化: 將 Python 物件轉換為二進制格式
with open("person.pkl", "wb") as file:
    pickle.dump(person, file)

# 反序列化: 從檔案中讀取二進制格式並轉換回 Python 物件
with open("person.pkl", "rb") as file:
    loaded_person = pickle.load(file)
print("Deserialized data:", loaded_person)

在這個例子中:

  • pickle.dump():將 Python 物件轉換為二進制格式並儲存在檔案中,這就是序列化。
  • pickle.load():將檔案中的二進制資料反序列化回 Python 物件。

為什麼要使用序列化和反序列化?

儲存和傳輸資料
透過序列化,可以將複雜的資料結構(例如 Python 物件、字典、列表等)轉換為便於儲存或傳輸的格式。反序列化則可以將其轉換回原本的格式,讓程式能夠繼續處理這些資料。

Web API 與資料交換
網頁應用程序、API、微服務等經常使用 JSON 來序列化和反序列化資料,以便於在不同的系統之間進行資料交換。

儲存 Python 物件
在 Python 中,你可以使用 Pickle 模組來將物件儲存到磁碟上(例如:保存模型、訓練資料、程式狀態等),並在需要時反序列化回來。

避免資料丟失:
透過序列化,你可以保證資料在傳輸或儲存過程中不會丟失或改變,並且能夠以一致的方式還原。

結論

序列化是將資料結構或物件轉換為可以儲存或傳輸的格式(如字串或二進制)。
反序列化是將這些格式轉換回原來的資料結構或物件。
這些技術對於資料儲存、網路資料傳輸和跨平台應用程式的開發至關重要。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言